/********************************************************************************

 **** Copyright (C), 2020, Fortior Technology Co., Ltd.                      ****

 ********************************************************************************
 * File Name     : SPI.c
 * Author        : Bruce HW&RD
 * Date          : 2020-10-15
 * Description   : .C file function description
 * Version       : 1.0
 * Function List :
 * 
 * Record        :
 * 1.Date        : 2020-10-15
 *   Author      : Bruce HW&RD
 *   Modification: Created file

********************************************************************************/

#include "SPI.h"
#include "FU68xx_5_MCU.h"

/*****************************************************************************
 * Function      : SPI_Init
 * Description   : SPI初始化
 * Input         : void  
 * Output        : None
 * Return        : 
 * Others        : 
 * Record
 * 1.Date        : 20190402
 *   Author      : Bruce HW&RD
 *   Modification: Created function

*****************************************************************************/
void SPI_Init(void)
{
//	SPI_CR0 = 0x00;
//	SPI_CR1 = 0x00;
	ClrBit(SPI_CR1 , SPIEN);// 0,disable SPI;1 enable

/*-------------------------------------------------------------------------------------------------
  SPI管脚配置
	1、禁止UART复用，P06配置为MISO，P05配置为MOSI
	2、禁止比较器输出复用，P07配置为SCLK
-------------------------------------------------------------------------------------------------*/
    ClrBit(PH_SEL , UART1EN);// 0,P06 as GPIO or SPI_MISO,P05 as GPIO or SPI_MOSI;1,P06 and p07 as USART
    ClrBit(PH_SEL1 , SPICT); // 0:P05/P06 1:P00/P01
/*-------------------------------------------------------------------------------------------------
	SPI时钟相位/极性配置
	CPHA = 0, CPOL = 0:上升沿接收，下降沿发送，空闲电平为低
	CPHA = 0, CPOL = 1:上升沿发送，下降沿接收，空闲电平为高
	CPHA = 1, CPOL = 0:上升沿发送，下降沿接收，空闲电平为低
	CPHA = 1, CPOL = 1:上升沿接收，下降沿发送，空闲电平为高
-------------------------------------------------------------------------------------------------*/
	SetReg(SPI_CR0 , CPHA | CPOL , CPOL);
/*-------------------------------------------------------------------------------------------------
	SPI从方式选择配置
	00：3线从方式或3线主方式，NSS信号不连到端口管脚
	01：4线从方式或4线多主方式，NSS配置为输入
	1x：4线单主方式，NSS配置为输出，NSS信号输出x电平
-------------------------------------------------------------------------------------------------*/
//	SetReg(SPI_CR1 , NSSMOD0 | NSSMOD1 , NSSMOD0 | NSSMOD1);    //三线DBG模式
    SetReg(SPI_CR1 , NSSMOD0 | NSSMOD1 , 0);  // 11:三线制     01:单线制（P05）
    SetBit(SPI_CR0 , SPIMS);                        // 0:Slave, 1:Master

/*-------------------------------------------------------------------------------------------------
	SPI中断配置
	SPIF：SPI字节传输完成中断标志，硬件置位，软件清零
	WCOL：SPI写冲突中断（发送缓冲器非空时写操作），硬件置位，软件清零
	MODF：SPI方式错误中断（多主方式NSS被拉低，MSTEN和SPIEN被清零）硬件置位，软件清零
	RXOVRN：SPI接收溢出中断（SPI接收缓冲器接收溢出），硬件置位，软件清零
-------------------------------------------------------------------------------------------------*/
    SetReg(SPI_CR1 , SPIIF|WCOL|MODF|RXOVRN , 0x00);// SPI所有中断清除
    SPIIE = 0;                                  // SPI中断使能
    SPI_CLK = 2;		// Fspi = Fcpu / (2*(SPI_CLK + 1)) = 6MHz
    SetBit(SPI_CR1 , SPIEN);					// Enable SPI
}

